package com.tanhua.dubbo.api.mongo;

import cn.hutool.core.date.DateUtil;
import com.tanhua.model.mongo.Visitors;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import java.util.Date;
import java.util.List;

/**
 * 访客记录服务接口实现
 */
@DubboService
@Slf4j
public class VisitorApiImpl implements VisitorApi{

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 保存访客记录
     *
     * @param visitors
     */
    @Override
    public void addVisitor(Visitors visitors) {
        log.debug("*******visitors******{}**********",visitors.toString());
        //获取年月日
        Date today = new Date();
        long time = today.getTime();//年月日时分秒
        visitors.setVisitDate(DateUtil.format(today, "yyyyMMdd")); //注意一定要放上面 下面查询时候要作为条件

        Long userId = visitors.getUserId();
        Long visitorUserId = visitors.getVisitorUserId();
        String from = visitors.getFrom();
        //1. 查询当前用户是否访问过佳人
        Query query1 = new Query();
        query1.addCriteria(Criteria.where("userId").is(userId)
                .and("visitorUserId").is(visitorUserId)
                .and("visitDate").is(visitors.getVisitDate()));
       if(mongoTemplate.exists(query1, Visitors.class)) {
           log.debug("*******visitors****更新了******");
           //2. 如果有访问过，更新访客记录from date
           Update update = new Update();
           update.set("from",from);
           update.set("date",time);
           mongoTemplate.updateFirst(query1,update,Visitors.class);
        }else{
           log.debug("*******visitors****保存了******");
           //3. 如果没有访问过 保存访客记录
           visitors.setDate(time);
           mongoTemplate.insert(visitors);
        }
    }

    /**
     * 获取5条记录
     *
     * @param userId
     * @param lastTime
     * @return
     */
    @Override
    public List<Visitors> findvisitors(Long userId, Long lastTime) {
        //1.构造查询条件
        Query query = new Query();
        query.addCriteria(Criteria.where("userId").is(userId));
        //2.lastTime是否不为空 添加一个条件 > lastTime
        if(lastTime!=null){
            query.addCriteria(Criteria.where("date").gt(lastTime));
        }
        query.with(Sort.by(Sort.Direction.DESC,"date"));
        query.limit(5);
        //3.调用进行查询访客记录
        return  mongoTemplate.find(query,Visitors.class);
    }
}
